.\" Copyright (c) 2001 Chris Costello <chris@FreeBSD.org>
.\" All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\"    notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\"    notice, this list of conditions and the following disclaimer in the
.\"    documentation and/or other materials provided with the distribution.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
.\" $FreeBSD: sys/kldsym.2 108087 2002-12-19 09:40:28Z ru $
.\"
.Dd July 26, 2001
.Dt KLDSYM 2
.Os
.Sh NAME
.Nm kldsym
.Nd look up address by symbol name in a KLD
.Sh LIBRARY
.Lb libc
.Sh SYNOPSIS
.In sys/param.h
.In sys/linker.h
.Ft int
.Fn kldsym "int fileid" "int command" "void *data"
.Sh DESCRIPTION
The
.Fn kldsym
system call returns the address of the symbol specified in
.Fa data
in the module specified by
.Fa fileid .
If
.Fa fileid
is 0, all loaded modules are searched.
Currently, the only
.Fa command
implemented is
.Dv KLDSYM_LOOKUP .
.Pp
The
.Fa data
argument is of the following structure:
.Pp
.Bd -literal -offset indent
struct kld_sym_lookup {
    int         version;        /* sizeof(struct kld_sym_lookup) */
    char        *symname;       /* Symbol name we are looking up */
    u_long      symvalue;
    size_t      symsize;
};
.Ed
.Pp
The
.Va version
member is to be set
by the code calling
.Fn kldsym
to
.Fn sizeof "struct kld_sym_lookup" .
The next two members,
.Va version
and
.Va symname ,
are specified by the user.
The last two,
.Va symvalue
and
.Va symsize ,
are filled in by
.Fn kldsym
and contain the address associated with
.Va symname
and the size of the data it points to, respectively.
.Sh RETURN VALUES
.Rv -std kldsym
.Sh ERRORS
The
.Fn kldsym
system call will fail if:
.Bl -tag -width Er
.It Bq Er EINVAL
Invalid value in
.Fa data->version
or
.Fa command .
.It Bq Er ENOENT
The
.Fa fileid
argument
is invalid,
or the specified symbol could not be found.
.El
.Sh SEE ALSO
.Xr kldfind 2 ,
.Xr kldfirstmod 2 ,
.Xr kldload 2 ,
.Xr kldnext 2 ,
.Xr kldunload 2 ,
.Xr modfind 2 ,
.Xr modnext 2 ,
.Xr modstat 2 ,
.Xr kld 4
.Sh HISTORY
The
.Fn kldsym
system call first appeared in
.Fx 3.0 .
